package models;

import java.net.ServerSocket;
import java.net.Socket;

import models.cartas.Baralho;
import play.data.validation.Constraints.Email;
import play.data.validation.Constraints.MinLength;
import socket.GerenciadorDoCliente;
import socket.Notificador;
import socket.ServidorNotificacao;

public class Jogador {

	private static final String CODIFICACAO = "US-ASCII";
	
	public int idJogador;
	@MinLength(8)
	public String nome;
	@MinLength(6)
	public String apelido;
	@MinLength(1)
	public String sexo;
	@Email
	public String email;
	@MinLength(6)
	public String senha;
	public int pontuacao;

	public Baralho baralho = new Baralho(Baralho.VAZIO);
	
	public GerenciadorDoCliente gerenciadorC;
	
	
	private Socket socketNotificador;
	

	public String toString() {
		return idJogador +" - "+ nome +" - "+ apelido +" - "+ sexo +" - "+ email +" - "+ senha +" - "+ pontuacao;
	}
	
	public void setGerenciador(GerenciadorDoCliente gerenciadorC){
		 this.gerenciadorC = gerenciadorC;
	}
	public void notificar(){
		gerenciadorC.notificar();
	}
	
	public void notificar2(String mensagem){
		if (socketNotificador == null) {
			System.out.println("Tentativa de recuperação de socket do jogador.");
			socketNotificador = ServidorNotificacao.sokets.get(String.valueOf(idJogador));
		}
		
		if (socketNotificador != null) {
			Thread notificador = new Thread(new Notificador(socketNotificador, mensagem));
			notificador.start();
		} else {
			System.out.println("Tentativa de recuperação de socket sem sucesso.");
		}
	}
	
	public Baralho getBaralho() {
		return this.baralho;
	}
	
	public boolean fecharNotificador(){
		try{
			socketNotificador.close();
			return true;
		}
		catch(Exception ex){
			ex.printStackTrace();
			return false;
		}
	}
	
	public void setSocketNotificador (Socket socket){
		this.socketNotificador = socket;
	}
	

}
